package com.muyuan.report.service;

import java.util.List;
import java.util.Map;

import com.muyuan.report.domain.vo.*;

import com.muyuan.clues.domain.TbActivity;
import com.muyuan.clues.domain.TbClue;
import com.muyuan.clues.domain.vo.IndexStatisticsVo;
import com.muyuan.contract.domain.TbContract;
import org.springframework.data.repository.query.Param;

public interface IReportService {

    /**
     *新增客户统计
     * @param beginCreateTime
     * @param endCreateTime
     * @return
     */


    /**
     * 客户统计报表
     *
     * @param tbContract
     * @return
     */
    public List<TbContract> contractReportList(TbContract tbContract);

    /**
     * 销售统计
     * @param beginCreateTime
     * @param endCreateTime
     * @return
     */


    /**
     * 销售统计部门报表
     *
     * @param beginCreateTime
     * @param endCreateTime
     * @return
     */
    public List<Map<String, Object>> deptStatisticsList(String beginCreateTime, String endCreateTime);

    /**
     * 销售统计渠道报表
     *
     * @param beginCreateTime
     * @param endCreateTime
     * @return
     */
    public List<Map<String, Object>> channelStatisticsList(String beginCreateTime, String endCreateTime);

    /**
     * 销售统计归属人报表
     *
     * @param beginCreateTime
     * @param endCreateTime
     * @return
     */
    public List<Map<String, Object>> ownerShipStatisticsList(String beginCreateTime, String endCreateTime);


    /**
     * 渠道统计
     *
     * @param beginCreateTime
     * @param endCreateTime
     * @return
     */
    public List<Map<String, Object>> chanelStatistics(String beginCreateTime, String endCreateTime);


    /**
     * 活动统计
     *
     * @param beginCreateTime
     * @param endCreateTime
     * @return
     */
    public List<Map<String, Object>> activityStatistics(String beginCreateTime, String endCreateTime);


    public List<TbClue> cluesStatisticsList(TbClue clue);

    /**
     * 活动渠道统计
     *
     * @param activity
     * @return
     */
    public List<ActivityStatisticsVo> activityStatisticsList(TbActivity activity);


    public IndexVo getIndex(IndexStatisticsVo request);


    public List<Map<String, Object>> salesStatisticsForIndex(IndexStatisticsVo request);


    /**
     * 首页基本数据展示
     *
     * @param beginCreateTime
     * @param endCreateTime
     * @return
     */
    IndexBaseInfoVO getBaseInfo(String beginCreateTime, String endCreateTime);

    /**
     * 获取今日简报数据
     *
     * @param today
     * @return
     */
    IndexTodayInfoVO getTodayInfo(String today);

    /**
     * 获取待办数据
     *
     * @param beginCreateTime
     * @param endCreateTime
     * @return
     */
    IndexTodoInfoVO getTodoInfo(
            String beginCreateTime, String endCreateTime);

    /**
     * 漏斗统计
     *
     * @param beginCreateTime
     * @param endCreateTime
     * @return
     */
    public VulnerabilityMapVo getVulnerabilityMap(String beginCreateTime, String endCreateTime);

    /**
     * 龙虎榜商机转化
     *
     * @param beginCreateTime
     * @param endCreateTime
     * @return
     */
    List<ChangeStatisticsVO> businessChangeStatistics(String beginCreateTime, String endCreateTime);

    /**
     * 龙虎榜线索转化
     *
     * @param beginCreateTime
     * @param endCreateTime
     * @return
     */
    List<ChangeStatisticsVO> salesStatistic(String beginCreateTime, String endCreateTime);

    /**
     * 查询每日新增线索数
     *
     * @param beginCreateTime
     * @param endCreateTime
     * @return
     */
    /**
     * 查询每日新增线索数
     *
     * @param beginCreateTime
     * @param endCreateTime
     * @return
     */
    LineChartVO cluesStatistics(
            @Param("beginCreateTime") String beginCreateTime,
            @Param("endCreateTime") String endCreateTime);

    /**
     * 销售统计
     *
     * @param beginCreateTime
     * @param endCreateTime
     * @return
     */
    public LineChartVO salesStatistics(String beginCreateTime, String endCreateTime);

    /**
     * 新增客户统计
     *
     * @param beginCreateTime
     * @param endCreateTime
     * @return
     */
    public LineChartVO contractStatistics(String beginCreateTime, String endCreateTime);

}
